package com.hyper_yang.javase.fileAndIO;

import org.junit.jupiter.api.Test;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;

public class IOTest {
    @Test
    public void testO() throws IOException {
        // todo: 字节输出流的基本使用
        // 1、创建字节流对象  文件不存在则会自动创建。 【覆盖内容】
        OutputStream os = new FileOutputStream("src\\main\\java\\com\\hyper_yang\\fileAndIO\\testFile\\b.txt");
        // 2、写出数据
//        os.write(65);
        byte[] bytes = {97, 98, 99, 100};
//        os.write(bytes);
        os.write(bytes, 1, 2);
        // 3、释放资源
        os.close();
    }

    @Test
    public void writeChinese() throws IOException {
        FileOutputStream os = new FileOutputStream("src\\main\\java\\com\\hyper_yang\\fileAndIO\\testFile\\b.txt");

//        os.write(20320); // 是 " ` "，而不是 你好
        String s = "你好，世界！！！"; // 可以写，但一般使用字符流写中文

        os.write(s.getBytes(StandardCharsets.UTF_8));

        os.close();
    }

    @Test
    public void testI() throws IOException {
        // todo: 字节输入流：将磁盘的数据读取到内存(程序)中
        // 1、创建字节输入流
        InputStream is = new FileInputStream("src\\main\\java\\com\\hyper_yang\\fileAndIO\\testFile\\b.txt");
        // 2、读入数据
//        int read = is.read(); // 一次读取一个
//        System.out.println((char)read);
        int num = -1;
        while ((num = is.read()) != -1) {
            System.out.println((char) num);
        }
        // 3、释放资源
        is.close();
    }

    @Test
    public void getInputBytes() throws IOException {

        InputStream is = new FileInputStream("src\\main\\java\\com\\hyper_yang\\fileAndIO\\testFile\\a.txt");

        // 准备字节数组，接收每次读取的数据
//        byte[] bytes = new byte[5];
        // 将读取到的数据按照指定数量存储到数组里   read是此次读取的有效字节数 最后一个有效元素的[index]
//        int read = is.read(bytes); // 按照这样读取，有可能有效数据 < 数组容量  会有上一次的遗留数据
//        System.out.println(Arrays.toString(bytes));
//        System.out.println(read);

        byte[] bytes = new byte[5];
        int read = -1;
        while ((read = is.read(bytes)) != -1) {
            String s = new String(bytes, 0, read); // 解决有无效元素的输出
            System.out.println(s);
            System.out.println(read);
        }
        is.close();
    }
}
